package com.cjy.collections;

import java.text.SimpleDateFormat;
import java.util.*;

/**
 * @author cheng jiye
 * @date 2020/3/28
 */
public class ListSort {
    //定义一个实体
    public static class UserBean {
        private String id;
        private String birthday;

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }

        public String getBirthday() {
            return birthday;
        }

        public void setBirthday(String birthday) {
            this.birthday = birthday;
        }
    }


    //未排序的原数据
    private static void UserListGenerate(List<UserBean> list) {
        UserBean user1 = new UserBean();
        UserBean user2 = new UserBean();
        UserBean user3 = new UserBean();
        user1.setId("zhagnsan");
        user1.setBirthday("1980-11-01");

        user2.setId("lisi");
        user2.setBirthday("1981-12-01");

        user3.setId("wangwu");
        user3.setBirthday("1980-12-01");

        list.add(user1);
        list.add(user2);
        list.add(user3);
    }

    private static void ListSort(List<UserBean> list) {
        //定义一个比较器
        Collections.sort(list, (o1, o2) -> {
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            try {
                Date dt1 = format.parse(o1.getBirthday());
                Date dt2 = format.parse(o2.getBirthday());
                if (dt1.getTime() > dt2.getTime()) {
                    return 1;
                } else if (dt1.getTime() < dt2.getTime()) {
                    return -1;
                } else {
                    return 0;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return 0;
        });
    }


    /**
     * 冒泡排序正序排序
     *
     * @param arr
     * @return
     */
    public static int[] bubbleSortPositive(int[] arr) {
        // 外层循环控制比较轮数
        for (int i = 0; i < arr.length; i++) {
            // 内层循环控制每轮比较次数
            for (int j = 0; j < arr.length - i - 1; j++) {
                // 按照从小到大排列
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        return arr;
    }

    public static int[] bubbleSortFlashback2(int[] arr) {
        // 外层循环控制比较轮数
        for (int i = 0; i < arr.length; i++) {
            // 内层循环控制每轮比较次数
            for (int j = 0; j < arr.length - i - 1; j++) {
                // 按照从小到大排列
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = temp;
                    arr[j + 1] = arr[j + 1];
                }
            }
        }
        return arr;
    }

    /**
     * 冒泡排序倒叙排序
     *
     * @param arr
     * @return
     */
    public static int[] bubbleSortFlashback(int[] arr) {
        // 外层循环控制比较轮数
        for (int i = 0; i < arr.length; i++) {
            // 内层循环控制每轮比较次数
            for (int j = 0; j < arr.length - i - 1; j++) {
                // 按照从大到小排列
                if (arr[j + 1] > arr[j]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        return arr;
    }

}
